home *** CD-ROM | disk | FTP | other *** search
/ PCMania 39 / PCMania CD39_2.iso / pcmania / magia39 / programa.bas
BASIC Source File  |  1995-10-30  |  4KB  |  115 lines

  1. RANDOMIZE TIMER         'Introduce un factor aleatorio
  2.  
  3. INPUT "¿Número de objetos azules"; noa%
  4. INPUT "¿Número de hormigas"; nh%
  5.  
  6. DIM coorx%(nh%)  'Coordenada x
  7. DIM coory%(nh%)  'Coordenada y
  8. DIM inx%(nh%)    'Incremento en la coordenada x
  9. DIM iny%(nh%)    'Incremento en la coordenada y
  10. DIM pixel%(nh%)  'Color del pixel sobre el que se mueve una hormiga
  11. DIM carga%(nh%)  'Carga que transporta una hormiga
  12.  
  13. SCREEN 7
  14.  
  15. 'Se distribuyen las cargas azules
  16. FOR a% = 1 TO noa%
  17.         PSET (RND * 100, RND * 100), 1
  18. NEXT
  19.  
  20. 'Se distribuyen las hormigas
  21. FOR a% = 1 TO nh%
  22. repite1:
  23.         'Posición inicial de cada hormiga
  24.         coorx%(a%) = RND * 100
  25.         coory%(a%) = RND * 100
  26.        
  27.         'Incremento de la posición
  28.         inx%(a%) = CINT(1.5 - 3 * RND)
  29.         iny%(a%) = CINT(1.5 - 3 * RND)
  30.        
  31.         'Se lee el color del pixel sobre el que se va a colocar una hormiga
  32.         pixel%(a%) = POINT(coorx%(a%), coory%(a%))
  33.        
  34.         'Se evita que dos hormigas coincidan en el mismo pixel o que
  35.         'la hormiga se quede inmóvil
  36.         IF pixel%(a%) = 15 OR (inx%(a%) = 0 AND iny%(a%) = 0) THEN GOTO repite1
  37.        
  38.         'Se imprime el punto que representa a la hormiga
  39.         PSET (coorx%(a%), coory%(a%))
  40. NEXT
  41.  
  42. 'Bucle principal
  43. DO
  44. FOR a% = 1 TO nh%
  45.         'Si se pulsa una tecla  se sale del programa
  46.         a$ = INKEY$
  47.         IF a$ <> "" THEN EXIT DO
  48.        
  49.         'Se almacenan las coordenadas y el color del pixel de la jugada
  50.         'anterior
  51.         coorx0% = coorx%(a%)
  52.         coory0% = coory%(a%)
  53.         pixel0% = pixel%(a%)
  54. repite2:
  55.         'Se garantiza un movimiento errático de las hormigas, aunque un
  56.         'tanto rectilíneo
  57.         IF RND < .3 THEN inx%(a%) = CINT(1.5 - 3 * RND)
  58.         IF RND < .3 THEN iny%(a%) = CINT(1.5 - 3 * RND)
  59.        
  60.         'Se comprueba que no haya ninguna hormiga en la siguiente posición
  61.         pixel%(a%) = POINT(coorx%(a%) + inx%(a%), coory%(a%) + iny%(a%))
  62.         IF pixel%(a%) = 15 THEN GOTO repite2
  63.        
  64.         'En caso afirmativo se produce el movimiento
  65.         coorx%(a%) = coorx%(a%) + inx%(a%)
  66.         coory%(a%) = coory%(a%) + iny%(a%)
  67.        
  68.         'Se evita que las hormigas se salgan fuera de los límites establecidos
  69.         IF coorx%(a%) < 1 THEN coorx%(a%) = 1: inx%(a%) = -inx%(a%)
  70.         IF coory%(a%) < 1 THEN coory%(a%) = 1: iny%(a%) = -iny%(a%)
  71.         IF coorx%(a%) > 100 THEN coorx%(a%) = 100: inx%(a%) = -inx%(a%)
  72.         IF coory%(a%) > 100 THEN coory%(a%) = 100: iny%(a%) = -iny%(a%)
  73.        
  74.         'Si el cuadro está vacio y la hormiga cargada se va a la subrutina
  75.         'de descarga
  76.         IF pixel%(a%) = 0 AND carga%(a%) = 1 THEN GOSUB descarga
  77.        
  78.         'Si el cuadro está ocupado por un objeto y la hormiga descargada se
  79.         'va a la subrutina de carga
  80.         IF pixel%(a%) = 1 AND carga%(a%) = 0 THEN GOSUB carga
  81.        
  82.         'Se imprime la nueva posición de la hormiga y se borra la anterior
  83.         PSET (coorx0%, coory0%), pixel0%
  84.         PSET (coorx%(a%), coory%(a%))
  85. NEXT
  86. LOOP
  87. END
  88.  
  89. descarga:
  90. 'Se rastrean los ocho pixels que rodean a la hormiga
  91. FOR largo% = coorx%(a%) - 1 TO coorx%(a%) + 1
  92.         FOR ancho% = coory%(a%) - 1 TO coory%(a%) + 1
  93.         IF POINT(largo%, ancho%) = 1 THEN suma% = suma% + 1
  94.         NEXT
  95. NEXT
  96.  
  97. 'Si en estos hay más de dos objetos azules la hormiga descarga el suyo
  98. IF suma% > 2 THEN carga%(a%) = 0: pixel%(a%) = 1
  99. suma% = 0
  100. RETURN
  101.  
  102. carga:
  103. 'Se rastrean los ocho pixels que rodean a la hormiga
  104. FOR largo% = coorx%(a%) - 1 TO coorx%(a%) + 1
  105.         FOR ancho% = coory%(a%) - 1 TO coory%(a%) + 1
  106.         IF POINT(largo%, ancho%) = 0 THEN suma% = suma% + 1
  107.         NEXT
  108. NEXT
  109.  
  110. 'Si en estos hay más de seis pixels vacios la hormiga carga el suyo
  111. IF suma% > 6 THEN carga%(a%) = 1: pixel%(a%) = 0
  112. suma% = 0
  113. RETURN
  114.  
  115.